package com.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class tickerThreads implements Runnable {
    //    定义票的数量
    private int ticker = 100;

    //使用lock锁
    private ReentrantLock lock = new ReentrantLock();
    @Override
    public void run() {

        while (true) {
//            添加锁后避面多个线程在获取共享数据时出现问题，在同一时刻只让一个线程访问共享数据
//            开启锁
            lock.lock();
            try {
                if (ticker <= 0) {
//                买票结束
                    break;
                } else {
                    Thread.sleep(1000);
                    ticker--;
                    System.out.println(Thread.currentThread().getName() + "在买票，还剩:" + ticker + "票");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
//                因为lock锁是不能自动释放的，需要手动释放锁
                lock.unlock();
            }
        }
    }
}
